package com.xbongbong.pro.message.service;/*/*/

import com.xbongbong.message.domain.entity.PushEntity;
import com.xbongbong.paas.toolbox.exception.XbbException;
import com.xbongbong.pro.message.enums.PushTypeEnum;
import com.xbongbong.pro.message.enums.RefEntityEnum;

import java.util.List;
import java.util.Map;

/**
 * Description: 推送service interface
 * @author 魏荣杰
 * @date 2019/1/6 1:16
 * @version v1.0
 * @since v1.0
 */
public interface PushService {

    /**
     * Description: 向数据库插入新的推送，同时向tb_push_link表插入相应数据
     * @param entity PushEntity
     * @return java.lang.Integer
     * @throws XbbException XbbException
     */
    Integer insert(PushEntity entity) throws XbbException;

    /**
     * Description: 批量插入推送数据，同时批量插入相应tb_push_link表数据
     * @param pushList PushEntity的list
     * @return void
     * @throws
     */
    void insertBatch(List<PushEntity> pushList);

    /**
     * Description: 保存推送数据，同时检查数据正常性
     * @param pushEntity
     * @return java.lang.Integer
     * @throws
     */
    Integer save(PushEntity pushEntity) throws XbbException;


    /**
     * 即时推送单对象的消息
     *  @param corpid    公司Id
     * @param userId    用户Id
     * @param title     消息标题
     * @param content   消息内容
     * @param refEntity 对象类型，RefEntityEnum【显示消息的图标】
     * @param refId     对象Id
     * @param pushType  推送类型，PushTypeEnum【指定消息的跳转路径】
     */
    void immediatelyPush(String corpid, String userId, String title, String content,
                         RefEntityEnum refEntity, Long refId, PushTypeEnum pushType);

    /**
     * 即时推送单对象的消息
     *  @param corpid     公司Id
     * @param userIdList 用户Id，队列
     * @param title      消息标题
     * @param content    消息内容
     * @param refEntity  对象类型，RefEntityEnum【显示消息的图标】
     * @param refId      对象Id
     * @param pushType   推送类型，PushTypeEnum【指定消息的跳转路径】
     */
    void immediatelyPush(String corpid, List<String> userIdList, String title, String content,
                         RefEntityEnum refEntity, Long refId, PushTypeEnum pushType);

    /**
     * 即时推送单对象的消息
     *  @param corpid     公司Id
     * @param userIdList 用户Id，队列
     * @param title      消息标题
     * @param content    消息内容
     * @param refEntity  对象类型，RefEntityEnum【显示消息的图标】
     * @param refId      对象Id
     * @param pushType   推送类型，PushTypeEnum【指定消息的跳转路径】
     * @param params     其他一些参数通过该params传入
     */
    void immediatelyPush(String corpid, List<String> userIdList, String title, String content,
                         RefEntityEnum refEntity, Long refId, PushTypeEnum pushType,
                         Map<String, Object> params);

    /**
     * 延时推送单对象的消息
     *  @param corpid    公司Id
     * @param userId    用户Id
     * @param title     消息标题
     * @param content   消息内容
     * @param refEntity 对象类型，RefEntityEnum【显示消息的图标】
     * @param refIdList 对象Id队列
     * @param pushType  推送类型，PushTypeEnum【指定消息的跳转路径】
     * @param pushTime  推送时间，10位 Int 值
     */
    void delayedPush(String corpid, String userId, String title, String content,
                     RefEntityEnum refEntity, List<Long> refIdList, PushTypeEnum pushType, Integer pushTime);

    /**
     * 延时推送单对象的消息
     *  @param corpid     公司Id
     * @param userIdList 用户Id，队列
     * @param title      消息标题
     * @param content    消息内容
     * @param refEntity  对象类型，RefEntityEnum【显示消息的图标】
     * @param refId      对象Id
     * @param pushType   推送类型，PushTypeEnum【指定消息的跳转路径】
     * @param pushTime   推送时间，10位 Int 值
     */
    void delayedPush(String corpid, List<String> userIdList, String title, String content,
                     RefEntityEnum refEntity, Long refId, PushTypeEnum pushType, Integer pushTime);

    /**
     * 延时推送单对象的消息
     *  @param corpid     公司Id
     * @param userIdList 用户Id，队列
     * @param title      消息标题
     * @param content    消息内容
     * @param refEntity  对象类型，RefEntityEnum【显示消息的图标】
     * @param refId      对象Id
     * @param pushType   推送类型，PushTypeEnum【指定消息的跳转路径】
     * @param pushTime   推送时间，10位 Int 值
     * @param params     其他一些参数通过该params传入
     */
    void delayedPush(String corpid, List<String> userIdList, String title, String content,
                     RefEntityEnum refEntity, Long refId, PushTypeEnum pushType, Integer pushTime,
                     Map<String, Object> params);

    /**
     * 即时推送对象Id队列的消息
     *  @param corpid     公司Id
     * @param userIdList 用户Id，队列
     * @param title      消息标题
     * @param content    消息内容
     * @param refEntity  对象类型，RefEntityEnum【显示消息的图标】
     * @param refIdList  对象Id，队列
     * @param pushType   推送类型，PushTypeEnum【指定消息的跳转路径】
     */
    void immediatelyPush(String corpid, List<String> userIdList, String title, String content,
                         RefEntityEnum refEntity, List<Long> refIdList, PushTypeEnum pushType);

    /**
     * 延时推送单对象Id队列的消息
     *  @param corpid     公司Id
     * @param userIdList 用户Id，队列
     * @param title      消息标题
     * @param content    消息内容
     * @param refEntity  对象类型，RefEntityEnum【显示消息的图标】
     * @param refIdList  对象Id，队列
     * @param pushType   推送类型，PushTypeEnum【指定消息的跳转路径】
     * @param pushTime   推送时间，10位 Int 值
     */
    void delayedPush(String corpid, List<String> userIdList, String title, String content,
                     RefEntityEnum refEntity, List<Long> refIdList, PushTypeEnum pushType, Integer pushTime);

    /**
     * 延时推送单对象Id队列的消息
     *  @param corpid     公司Id
     * @param userIdList 用户Id，队列
     * @param title      消息标题
     * @param content    消息内容
     * @param refEntity  对象类型，RefEntityEnum【显示消息的图标】
     * @param refIdList  对象Id，队列
     * @param pushType   推送类型，PushTypeEnum【指定消息的跳转路径】
     * @param pushTime   推送时间，10位 Int 值
     * @param params     其他一些参数通过该params传入
     */
    void delayedPush(String corpid, List<String> userIdList, String title, String content,
                     RefEntityEnum refEntity, List<Long> refIdList, PushTypeEnum pushType, Integer pushTime,
                     Map<String, Object> params);

    /**
     * 重构延迟推送方法
     *  @param corpid     公司id
     * @param userIdList 用户Id，队列
     * @param title      消息标题
     * @param content    消息内容
     * @param refEntity  对象类型，RefEntityEnum【显示消息的图标】
     * @param refIdList  对象Id，队列
     * @param pushType   推送类型，PushTypeEnum【指定消息的跳转路径】
     * @param attrEntity 提醒字段（对象的属性字段名，非指定字段提醒时为空）
     * @param pushTime   推送时间，10位 Int 值
     * @param params     其他一些参数通过该params传入
     */
    void delayedPush(String corpid, List<String> userIdList, String title,
                     String content, RefEntityEnum refEntity, List<Long> refIdList,
                     PushTypeEnum pushType, String attrEntity, Integer pushTime,
                     Map<String, Object> params);


}
